package com.java复习.jdbc.书籍管理系统;

import java.sql.*;
import java.util.Scanner;

public class Main {

    // 入口
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Main m = new Main();//实例化当前类的对象，调用其他成员方法
        Scanner sc = new Scanner(System.in);
        while(true) {
            int ch = m.menu();//调用菜单选项，获取用户的选择
            switch(ch) {//使用Switch结构根据用户输入执行不同功能
                case 1:
                    m.selectAll();
                    break;
                case 2:
                    System.out.println("请输入书籍名：");
                    String name = sc.next();
                    m.select(name);
                    break;
                case 3:
                    System.out.println("请输入需要添加的书籍的数量：");
                    int n = sc.nextInt();
                    int countInsert = m.add(n);//获取插入成功的数据行数
                    //如果插入成功行数与用户输入相等，则表示成功。还有事务回滚和提交操作没有实现，感兴趣的朋友可以自行添加实现这个功能。
                    if(countInsert==n) {
                        System.out.println("书籍信息添加成功!");
                    }else {
                        System.out.println("信息输入有误，书籍添加失败。");
                    }
                    break;
                case 4:
                    System.out.println("请输入需要修改的书籍的书名：");
                    String bookname= sc.next();
                    int countUpdate = m.update(bookname);
                    if(countUpdate==1) {
                        System.out.println("书籍信息修改成功。");
                    }
                    break;
                case 5:
                    System.out.println("请输入需要删除的书籍的书名：");
                    String bookname1 = sc.next();
                    int countDelete = m.delet(bookname1);
                    if(countDelete==1) {
                        System.out.println("删除成功。");
                    }else {
                        System.out.println("删除失败。");
                    }
                    break;
                case 6:
                    System.out.println("感谢使用，系统退出中......");
                    System.exit(0);//退出执行
                default:
                    System.err.println("请选择相应的功能......");
            }
            System.out.println("请输入回车键继续......");
            sc.nextLine();
        }
    }

    // 菜单
    public int menu() {
        Scanner sc = new Scanner(System.in);
        System.out.println("****************书籍管理系统****************");
        System.out.println("\t\t1、查询全部书籍...");
        System.out.println("\t\t2、查询单个书籍...");
        System.out.println("\t\t3、增加书籍...");
        System.out.println("\t\t4、修改书籍信息...");
        System.out.println("\t\t5、删除书籍...");
        System.out.println("\t\t6、退出系统...");
        System.out.println("请选择你需要的功能:");
        return sc.nextInt();
    }

    // 数据库连接
    public Connection getConnection() throws SQLException, ClassNotFoundException {
        String Driver = "com.mysql.cj.jdbc.Driver";
        String url="jdbc:mysql://localhost:3306/book?serverTimezone=GMT%2B8";
        String user="root";
        String pwd="ljh990124";
        Class.forName(Driver);//加载驱动
        Connection con = DriverManager.getConnection(url,user,pwd);//建立连接
        if(con.isClosed()) {
            System.err.println("数据库连接失败。");
            return null;
        }else {
            System.out.println("连接成功。");
            return con;
        }
    }

    // 查询全部
    public void selectAll() throws SQLException, ClassNotFoundException {
        Connection con = getConnection();//调用getConnection()方法获取数据库连接对象
        PreparedStatement ps = con.prepareStatement("select * from books limit 10");//创建预处理对象执行SQL查询语句
        ResultSet rs = ps.executeQuery();//查询结果集
        System.out.println("书名\t\t  作者\t\t 评分\t\t 类型\t\t");
        while(rs.next()) {//遍历结果集
            //使用ResultSet的get方法获取集合中的值，参数为数据库中的字段名
            System.out.println(rs.getString("name")+"\t"
                    +rs.getString("author")+"\t"
                    +rs.getString("score")+"\t  "
                    +rs.getString("type")+"\t  "
                    +rs.getString("label")+"\t");
        }
    }

    // 查询单个
    public void select(String name) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();//调用getConnection()方法获取数据库连接对象
        PreparedStatement ps = con.prepareStatement("select * from books where name=" + "'" + name + "'");
        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            System.out.println("书名\t\t  作者\t\t 评分\t\t 类型\t\t  标签");
            System.out.println(rs.getString("name") + "\t"
                    + rs.getString("author") + "\t"
                    + rs.getString("score") + "\t  "
                    + rs.getString("type") + "\t  "
                    + rs.getString("label") + "\t");
        }
        System.out.println("没有关于《"+name+"》的书籍信息，请检查后重新输入......");
    }

    // 增加
    public int add(int num) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();
        String sql = "insert into books values(null,?,?,?,?,?,null,null,null,null,null,null)";//定义SQl语句，班级编号和学分不需手动插入。
        PreparedStatement ps = con.prepareStatement(sql);//执行SQL语句
        Scanner sc = new Scanner(System.in);
        int count=0;//定义变量保存修改的行数
        for(int i=1;i<=num;i++) {
            System.out.println("请输入第"+i+"个书籍的书名：");
            String name = sc.next();
            System.out.println("请输入第"+i+"个书籍的作者：");
            String author = sc.next();
            System.out.println("请输入第"+i+"个书籍的评分：");
            String score = sc.next();
            System.out.println("请输入第"+i+"个书籍的类型：");
            String type = sc.next();
            System.out.println("请输入第"+i+"个书籍的标签：");
            String label = sc.next();
            //将输入的值传入，执行SQL，添加数据
            ps.setString(1, name);
            ps.setString(2, author);
            ps.setString(3, score);
            ps.setString(4, type);
            ps.setString(5, label);
            //executeUpdate()方法的返回值为受影响的行数(插入的数据行数),如果返回值为1，则表示数据插入成功(一次循环执行一次插入)
            if(ps.executeUpdate()==1) {//
                count++;//插入成功，将count值加一
            }else {
                System.out.println("数据插入失败。");
                break;
            }
        }
        return count;//返回受影响的行数
    }

    // 修改
    public int update(String name) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();
        String sql="update books set author=?,score=?,type=?,label=? where name='"+name+"'"; //根据名字修改

        PreparedStatement ps = con.prepareStatement(sql);
        Scanner sc = new Scanner(System.in);
        int count=0;
        System.out.println("请输入书籍作者：");
        String author = sc.next();
        System.out.println("请输入书籍评分：");
        String score = sc.next();
        System.out.println("请输入书籍类型：");
        String type = sc.next();
        System.out.println("请输入书籍标签：");
        String label = sc.next();
        ps.setString(1,author);
        ps.setString(2,score);
        ps.setString(3,type);
        ps.setString(4,label);
        count = ps.executeUpdate();
        return count;//返回受影响的行数



    }

    // 删除

    public int delet(String name) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();
        select(name);
        Scanner sc = new Scanner(System.in);
        System.out.println("请确认信息是否无误（y/Y）？");
        char ch1 = sc.next().charAt(0);
        //
        if(ch1=='Y'||ch1=='y') {
            System.out.println("请确认是否删除（y/Y）?");
            char ch2 = sc.next().charAt(0);
            if(ch2=='y'||ch2=='Y') {//确认删除后，执行删除操作
                PreparedStatement psD = con.prepareStatement("delete from books where name='"+name+"'");
                int  count  = psD.executeUpdate();
                return count;//返回受影响的行数
            }else {
                System.out.println("删除取消。");
                return 0;
            }
        }else {
            System.out.println("信息有误，请重新选择......");
            return -1;
        }
    }








}
